package com.itany.parser;

import com.itany.entity.School;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.xml.sax.SAXException;

import java.io.IOException;

/**
 * @author 陈华旺
 * @version 1.0
 * @date 2023年11月20日 13:34
 * @Description TODO
 */
public class ParserForDigester {
    public static void main(String[] args) {
//        commons-digester 进行XML解析时是直接将XML中的标记内容转换为JAVA的实例对象
//        因此进行xml解析时，如何描述标记对应的实例，标记对应的属性，标记对应的集合都需提前设置说明
//        通过自定义 xml 规则文件，完成需要解析的xml文件和对应的JAVA实体类的一一对应关系
//        1. 基于DigesterLoader.createDigester 创建解析器，同时设置映射规则
        Digester digester = DigesterLoader.createDigester(
                ParserForDigester.class.getClassLoader().getResource("com/itany/rules/school.rule.xml")
        );
//        2. 准备一个根标记对应的空java实例对象
        School school = new School();
//        3. 将对象作为根映射对象填充到解析中
        digester.push(school);
        try {
            System.out.println( "解析前:\n" + school );
//          4. 提供数据
            digester.parse(
                    ParserForDigester.class.getClassLoader().getResourceAsStream("school.xml")
            );
            System.out.println( "解析前:\n" + school );
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }


    }
}
